﻿#region Using

using System.Collections.Generic;
using System.Linq;
using Vk.Methods.Groups;
using Vk.Methods.Users;

#endregion

namespace Vk.Methods.News
{
    /// <summary>
    ///     Лента новостей
    /// </summary>
    public class Newsfeed
    {
        private List<BaseGroup> _groupes;
        private List<NewsEntity> _items;
        private List<BaseUser> _profiles;

        /// <summary>
        ///     Информация о группах, которые находятся в списке новостей
        /// </summary>
        public List<BaseGroup> Groupes
        {
            get { return _groupes ?? (_groupes = new List<BaseGroup>()); }
            set { _groupes = value; }
        }

        /// <summary>
        ///     Массив новостей для текущего пользователя
        /// </summary>
        public List<NewsEntity> Items
        {
            get { return _items ?? (_items = new List<NewsEntity>()); }
            set { _items = value; }
        }

        /// <summary>
        ///     start_from, приходящий в виде строки в поле next_from для получения следующей страницы.
        /// </summary>
        public string NextFrom { get; set; }

        /// <summary>
        ///     Информация о пользователях, которые находятся в списке новостей
        /// </summary>
        public List<BaseUser> Profiles
        {
            get { return _profiles ?? (_profiles = new List<BaseUser>()); }
            set { _profiles = value; }
        }

        public Newsfeed(ApiNode x)
        {
            var items =
                x.SelectNode("items")
                 .ChildNodes;
            var nodes = items as List<ApiNode> ?? items.ToList();
            if (nodes.Any())
            {
                foreach (var item in nodes)
                {
                    Items.Add(new NewsEntity(item));
                }
            }

            var profiles =
                x.SelectNode("profiles")
                 .ChildNodes;
            nodes = profiles as List<ApiNode> ?? profiles.ToList();
            if (nodes.Any())
            {
                foreach (var profile in nodes)
                    Profiles.Add(new User(profile));
            }

            var groups =
                x.SelectNode("groups")
                 .ChildNodes;
            nodes = groups as List<ApiNode> ?? groups.ToList();
            if (nodes.Any())
            {
                foreach (var group in nodes)
                    Groupes.Add(new Group(group));
            }

            NextFrom = x.SelectNode("next_from").String();
        }
    }
}